ggplot2This worksheet will guide you through data visualisation tasks using
the mtcars dataset. Please follow the
instructions for each task and try to solve them on your own before
checking the solution.
mtcars DatasetBefore we begin visualising, explore the
mtcars dataset using the following
functions: 1. View the first 6 rows using head(). 2. Get
the structure of the dataset using str(). 3. Summarise the
dataset using summary().
# Explore the mtcars dataset
head(mtcars) # View the first 6 rows
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
str(mtcars) # View the structure of the dataset
## 'data.frame': 32 obs. of 11 variables:
## $ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
## $ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
## $ disp: num 160 160 108 258 360 ...
## $ hp : num 110 110 93 110 175 105 245 62 95 123 ...
## $ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
## $ wt : num 2.62 2.88 2.32 3.21 3.44 ...
## $ qsec: num 16.5 17 18.6 19.4 17 ...
## $ vs : num 0 0 1 1 0 1 0 1 1 1 ...
## $ am : num 1 1 1 0 0 0 0 0 0 0 ...
## $ gear: num 4 4 4 3 3 3 3 4 4 4 ...
## $ carb: num 4 4 1 1 2 1 4 2 2 4 ...
summary(mtcars) # Summarise the dataset
## mpg cyl disp hp
## Min. :10.40 Min. :4.000 Min. : 71.1 Min. : 52.0
## 1st Qu.:15.43 1st Qu.:4.000 1st Qu.:120.8 1st Qu.: 96.5
## Median :19.20 Median :6.000 Median :196.3 Median :123.0
## Mean :20.09 Mean :6.188 Mean :230.7 Mean :146.7
## 3rd Qu.:22.80 3rd Qu.:8.000 3rd Qu.:326.0 3rd Qu.:180.0
## Max. :33.90 Max. :8.000 Max. :472.0 Max. :335.0
## drat wt qsec vs
## Min. :2.760 Min. :1.513 Min. :14.50 Min. :0.0000
## 1st Qu.:3.080 1st Qu.:2.581 1st Qu.:16.89 1st Qu.:0.0000
## Median :3.695 Median :3.325 Median :17.71 Median :0.0000
## Mean :3.597 Mean :3.217 Mean :17.85 Mean :0.4375
## 3rd Qu.:3.920 3rd Qu.:3.610 3rd Qu.:18.90 3rd Qu.:1.0000
## Max. :4.930 Max. :5.424 Max. :22.90 Max. :1.0000
## am gear carb
## Min. :0.0000 Min. :3.000 Min. :1.000
## 1st Qu.:0.0000 1st Qu.:3.000 1st Qu.:2.000
## Median :0.0000 Median :4.000 Median :2.000
## Mean :0.4062 Mean :3.688 Mean :2.812
## 3rd Qu.:1.0000 3rd Qu.:4.000 3rd Qu.:4.000
## Max. :1.0000 Max. :5.000 Max. :8.000
Create a scatter plot showing the relationship between mpg (miles per gallon) and hp (horsepower).
# Scatter plot of mpg vs hp
plot(mtcars$mpg, mtcars$hp,
main = "Scatter Plot of MPG vs Horsepower",
xlab = "Miles Per Gallon (mpg)",
ylab = "Horsepower (hp)",
col = "blue", pch = 19)
Create a histogram of the mpg variable to visualise its distribution.
# Histogram of mpg
hist(mtcars$mpg,
main = "Histogram of Miles Per Gallon",
xlab = "Miles Per Gallon (mpg)",
col = "lightgreen", border = "black")
ggplot2ggplot2Using ggplot2, create a scatter plot of
mpg vs hp. Colour the points by the
number of cylinders (cyl).
library("ggplot2")
# Scatter plot of mpg vs hp coloured by number of cylinders
ggplot(data = mtcars, aes(x = mpg, y = hp, color = factor(cyl))) +
geom_point(size = 3) +
labs(title = "MPG vs Horsepower Coloured by Cylinders",
x = "Miles Per Gallon (mpg)", y = "Horsepower (hp)") +
theme_bw()
ggplot2Create a bar plot showing the frequency of different
numbers of cylinders (cyl).
# Bar plot of number of cylinders
ggplot(data = mtcars, aes(x = factor(cyl))) +
geom_bar(fill = "lightblue") +
labs(title = "Bar Plot of Cylinder Counts", x = "Number of Cylinders", y = "Count") +
theme_bw()
ggplot2Create a faceted scatter plot of
mpg vs hp. Facet the plot by the
number of cylinders (cyl).
# Faceted scatter plot of mpg vs hp by number of cylinders
ggplot(data = mtcars, aes(x = mpg, y = hp)) +
geom_point(color = "blue") +
facet_wrap(~factor(cyl)) +
labs(title = "MPG vs Horsepower Faceted by Cylinders", x = "Miles Per Gallon (mpg)", y = "Horsepower (hp)") +
theme_bw()
ggplot2Create a scatter plot of mpg vs
wt (weight) and customise the plot by: - Adding a title
and axis labels. - Applying a custom theme (e.g.,
theme_classic()). - Using a custom colour palette for the
points.
# Scatter plot of mpg vs weight with customisation
ggplot(data = mtcars, aes(x = mpg, y = wt, color = factor(gear))) +
geom_point(size = 3) +
labs(title = "MPG vs Weight by Number of Gears",
x = "Miles Per Gallon (mpg)", y = "Weight (1000 lbs)") +
scale_color_brewer(palette = "Set1") +
theme_classic()
Create a scatter plot of mpg vs hp. Add an annotation to highlight points where hp > 200 with a text label.
# Scatter plot with annotation
ggplot(data = mtcars, aes(x = mpg, y = hp)) +
geom_point(color = "blue") +
labs(title = "MPG vs Horsepower with Annotation", x = "Miles Per Gallon (mpg)", y = "Horsepower (hp)") +
annotate("text", x = 15, y = 300, label = "High HP", color = "red", size = 5) +
theme_bw()
Create a scatter plot of mpg vs hp. Add a linear regression line to the plot.
# Scatter plot with regression line
ggplot(data = mtcars, aes(x = mpg, y = hp)) +
geom_point(color = "blue", alpha = 0.6) +
geom_smooth(method = "lm", color = "red", se = FALSE) +
labs(title = "Scatter Plot of MPG vs Horsepower with Regression Line", x = "Miles Per Gallon (mpg)", y = "Horsepower (hp)") +
theme_bw()
## `geom_smooth()` using formula = 'y ~ x'
plotlyConvert your scatter plot of mpg vs
hp into an interactive plot using the
plotly package.
library("plotly")
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
# Create a ggplot2 scatter plot
p <- ggplot(data = mtcars, aes(x = mpg, y = hp)) +
geom_point(color = "blue") +
labs(title = "Interactive Scatter Plot of MPG vs Horsepower", x = "Miles Per Gallon (mpg)", y = "Horsepower (hp)") +
theme_bw()
# Convert to interactive plot using ggplotly
ggplotly(p)
In this worksheet, you’ve practiced: - Creating basic visualisations
using base R and ggplot2. - Customising visualisations with
themes, labels, and annotations. - Creating advanced plots with
faceting, annotations, and multiple layers. - Converting static plots to
interactive plots using plotly.